<?php
class Controller
{
	public $messageErreur = 'prout'; //en test
	public $request;
	private $vars = array(); 		// Contient les variables
	public $layout = 'default';
	private $rendered = false;		// Pour savoir si la vue a déjà été rendue ou non --> pour ne pas le faire 2 fois
	/**
	*	Fonction constructrice qui récupère le request
	**/
	function __construct($request = null)
	{
		if($request){
			$this->request = $request;	// On stock la requête dans l'instance
		}
	}

	/**
	* Fonction pour rendre la vue correspondante
	* @param $view la vue à afficher (chemin depuis view ou nom de la vue)
	**/
	public function render($view)
	{
		if($this->rendered)
		{
			return false;
		}

		//Extraction des variables
		extract($this->vars);

		if(strpos($view, '/') === 0)
		{
			$view = ROOT.DS.'view'.$view.'.php';
		}
		else
		{
			$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
		}
		
		// ob_start pour que le contenu qui doit s'afficher ne s'affiche pas mais soit stocké
		ob_start();
		require($view);
		//Pour récupérer ce contenu
		$content_for_layout = ob_get_clean();

		require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';

		$this->rendered = true;
	}

	/**
	* Fonction pour insérer des variables dans le tableau $vars
	* @param $key le nom de la variable OU tableau de variables
	* @param $value la valeur de la variable
	**/
	public function set($key, $value=null)
	{
		if(is_array($key))
		{
			$this->vars += $key;
		}
		else
		{
			$this->vars[$key] = $value;
		}
	}

	/**
	 * Permet de charger un model
	 * @param $name Nom du model
	 */
	function loadModel($name){
		$file = ROOT.DS.'model'.DS.$name.'.php';
		require_once($file);
		if(!isset($this->$name)){
			$this->$name = new $name();
		}
	}
	
	/**
	* Permet de gérer les ereurs 404
	*/
	function e404($message){
		header("HTTP/1.0 404 Not Found");
		$this->set('message', $message);
		$this->render('/errors/404');
		die();
	}

	/**
	* Permet d'appeler un contrôleur depuis une vue
	*/
	function request($controller, $action){
		$controller .= 'Controller';
		require_once ROOT.DS.'controller'.DS.$controller.'.php';
		$c = new $controller();
		return $c->$action();
	}

		
	// Fonction permettant de connaître l'id du premier album d'un membre
	// Renvoie 0 si ce membre n'a aucun album
	function getIdPremierAlbum($idMembre){
		$this->loadModel('Album');
		$condition = array('idMembre' => $idMembre);
		$album = $this->Album->findFirst(array(
			'conditions'	=>	$condition
		));
		
		if(!empty($album)){
			$idAlbum = $album->idAlbum;
		}
		else {
			$idAlbum = 0;
		}
		return $idAlbum;
	}

	function getIdAlbum($idMembre, $nomAlbum){
		$this->loadModel('Album');
		$condition = array('idMembre' => $idMembre, 'nom' => $nomAlbum);
		$album = $this->Album->findFirst(array(
			'conditions'	=>	$condition
		));
		$idAlbum = $album->idAlbum;
		return $idAlbum;
	}
	
	function getNomUser($idMembre){
		$this->loadModel('User');
		$condition = array('idMembre' => $idMembre);
		$membre = $this->User->findFirst(array(
			'conditions'	=>	$condition
		));
		$nomMembre = $membre->login;
		return $nomMembre;
	}
}

?>